package com.outdoor.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.outdoor.model.entity.Trip;
import com.outdoor.model.enums.ActivityType;
import com.outdoor.model.enums.TripStatus;

import java.util.List;

/**
 * 行程服务接口
 * 
 * @author OutdoorTeam
 * @date 2025-05-18
 */
public interface TripService {

    /**
     * 创建行程
     * 
     * @param trip 行程信息
     * @param organizerId 组织者ID
     * @return 创建的行程
     */
    Trip createTrip(Trip trip, Long organizerId);

    /**
     * 从团队创建行程
     * 
     * @param teamId 团队ID
     * @param organizerId 组织者ID
     * @return 创建的行程
     */
    Trip createTripFromTeam(Long teamId, Long organizerId);

    /**
     * 获取行程详情
     * 
     * @param id 行程ID
     * @return 行程信息
     */
    Trip getTripById(Long id);

    /**
     * 获取团队的行程
     * 
     * @param teamId 团队ID
     * @return 行程信息
     */
    List<Trip> getTripsByTeamId(Long teamId);

    /**
     * 更新行程状态
     * 
     * @param id 行程ID
     * @param status 行程状态
     * @param currentUserId 当前操作用户ID
     * @return 更新后的行程
     */
    Trip updateTripStatus(Long id, TripStatus status, Long currentUserId);

    /**
     * 为行程添加照片
     * 
     * @param id 行程ID
     * @param photoUrl 照片URL
     * @param currentUserId 当前操作用户ID
     * @return 更新后的行程
     */
    Trip addTripPhoto(Long id, String photoUrl, Long currentUserId);

    /**
     * 查询用户组织的行程
     * 
     * @param userId 用户ID
     * @param page 分页对象
     * @return 行程分页列表
     */
    IPage<Trip> getTripsByOrganizer(Long userId, Page<Trip> page);

    /**
     * 按状态查询行程
     * 
     * @param status 行程状态
     * @param page 分页对象
     * @return 行程分页列表
     */
    IPage<Trip> getTripsByStatus(TripStatus status, Page<Trip> page);

    /**
     * 按活动类型和状态查询行程
     * 
     * @param activityType 活动类型
     * @param status 行程状态
     * @param page 分页对象
     * @return 行程分页列表
     */
    IPage<Trip> getTripsByActivityTypeAndStatus(ActivityType activityType, TripStatus status, Page<Trip> page);
    
    /**
     * 获取行程照片列表
     * 
     * @param trip 行程
     * @return 照片URL列表
     */
    List<String> getTripPhotos(Trip trip);
} 